Class创建和实例化

class创建实例化 class等价于c中的struct

class 类 -data type (eg.str,int…

object 对象 - insitance -实例
p1=person() i = 3 s = ‘string’

属性-attribute 数据成员 - data member
person::sname

方法 method 成员函数 member function
person::speak() eat() int.to_bytes() list.sort()

发送消息
p1 = person()
p1.eat()

class person():
#…
pass

pp1 = person()
a = int(3)#这两行都是创建对象,只不过上面是自己定义的类型,下面是python内置类型

# define a class
#self源自于myself,当我们执行一个动作时,需要指定谁(self),完成什么动作self.动作
#self表面当前函数在那个对象上执行。隐式传递
from enum import Enum #Enum是一个类型,从enum中导入
import numpy as np
class gender(Enum):#继承语法 inherition
    male = 0
    female = 1
class person:
    "这是一个说明document,user defined class : person"
    #如果想创建一个对象,该对象会执行构造函数完成初始化
    def __init__(self, idno='N/A',name='N/A'):
    #一个构造函数,__init__有两个下划线,避免user重复命名
    #N/A是not available值没有给,默认参数
        self.sname = name#这个人的名字
        self.gender = gender.male#这个人的性别,from class 'gender'
        self.sid = idno
        self.iweight = 0
    
    def speak(self):
        print("person::speak():")
        print('i am',self.sname+',','nice to meet you')
    
    def eat(self,weight):
        self.iweight += weight
        print('i just eat', weight,'gram food.','i am',self.iweight,'gram now')
    
    def description(self):
        assert self.gender in (gender.female, gender.male)#assert 断言语法,如果写错了会提示
        s = 'id: %s \t name: %s\n'%(self.sid,self.sname)
        #t = 'gender: %s\tbody weight: %d'% ('male' if self.gender==)
        return s
print(person.__doc__)#person.__doc__是class中的说明书“”里的内容
这是一个说明document,user defined class : person

enum作用

#需要完成一个任务,判断男性还是女性

#solution1, if
#存在问题,字符串比较需要逐个slow。容易记错
a = 'male'#很早以前付过值
#...
if a == 'Male':#过了一个月想判断是男是女,忘记male还是Male
    print('he')
else:
    print('she')
#需要完成一个任务,判断男性还是女性

#solution2

a = 0 # 0 for male 1for female
#...过了一段时间
if a == 0 :#需要判断,但是忘了0代表男还是女
    print('male')
else:
    print('female')
#solution 3 
#更好的方法是为这样的枚举类型定义一个class类型,然后,每个常量都是class的一个唯一实例。Python提供了Enum类来实现这个功
#开头的class gender(Enum):

将class实例化

#实例化对象create an object
#同一个类型的不同对象间属性是独立的,但是方法是共享的
yangchen = person("330327","chenyang")
wang = person('330122','wang xiao')
print(yangchen.gender,wang.sname)
wang.gender = gender.female
wang.eat(2) # same as "person.eat(wang,1)显式传递一般不用"
print(wang.description())
gender.male wang xiao
i just eat 2 gram food. i am 2 gram now
id: 330122 	 name: wang xiao

封装&继承

#复用

#接口 interface 只需要考虑接口,接口内部不需要考虑
#实现 implementation 接口内部的东西

#封装 设计一个高性能的implementation 和简单的interface,使得别人能快速上手**

#继承
发布了8 篇原创文章 · 获赞 0 · 访问量 21

猜你喜欢

转载自blog.csdn.net/weixin_44827144/article/details/105566756