类和对象定义:

  类:类是具有相同属性和技能的一类事务。

  对象:实例化一个类,是类的具体体现。

 

定义一个类的格式:

class 类名:
  "可以写一些解释信息"
  类体(集体代码)

简单实现:

class Person:   # 定义一个类 名字为Person
    animal = '高级动物'  # 类里面定义的变量叫做静态变量
    soup = '会思考'
    def work(self):   # 类里面定义的函数叫做方法或者动态变量
        print('人类会工作')

操作静态变量:

1、查 __dict__ 只能查,不能增删改:

1 print(Person.__dict__)
2 {'__module__': '__main__', 'animal': '高级动物', 'soup': '会思考', 'work': <function Person.work at 0x00000000023EB8C8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
3 
4 print(Person.__dict__['animal'])
5 高级动物

2、增删改查:

(1)、查

1 print(Person.animal)
2 高级动物
3 
4 print(Person.soup)
5 会思考

(2)、改

Person.animal = '超级生物'
Person.soup = '会打扮'

print(Person.animal)
超级生物
print(Person.soup)
会打扮

(3)、增

1 Person.skill = '会说话'
2 
3 print(Person.skill)
4 会说话

(4)、删

1 del Person.skill
2 
3 print(Person.__dict__)
4 {'__module__': '__main__', 'animal': '高级动物', 'soup': '会思考', 'work': <function Person.work at 0x0000000001E7B8C8>, '__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}

一般想查询全部的静态变量时,用__dict__,其他全部用类名.变量名。

 

操作方法(动态变量)

1、使用__dict__操作

1 print(Person.__dict__['work'](None))  # 因为类里面的方法有一个形参,所以必须传一个实参,这个None传给self,不代表任何作用
2 人类会工作
3 None   # 返回的None和传的None没关系,这是因为类里面的方法没有返回值。

2、直接使用:类名.方法名

1 Person.work(None)  # 这个None和上面的意思是一样的。
2 人类会工作

如果是操作类里面的方法的话,就使用:类名.方法名 的方式。

 1 class Person:
 2     animal = '灵长类动物'
 3     soup = '会思考'
 4 
 5     def __init__(self,name,age,sex,high,weight):  # __init__方法属于构造方法
 6         self.name = name   # 这些叫做属性
 7         self.age = age
 8         self.sex = sex
 9         self.high = high
10         self.weight = weight
11         print('beautifully')
12 
13     def work(self,job):
14         self.job = job    # 在woek方法中添加一个属性,这里的self就是p1这个对象的内存地址
15 
16         print(self) # <__main__.Person object at 0x000000000220AEF0>
17         print('人类会工作')
18 
19 p1 = Person()  # 实例化对象时,会直接触发__init__方法
20 beautifully

 

实例化一个对象,会自动触发类里面的构造方法,此时内部进行了三部:

1、实例化一个对象,在内存中产生一个对象空间。

2、自动执行init方法,并将这个空间对象(对象的内存地址)传给里面的self。

3、通过构造方法里面的代码给空间对象添加一些属性,并返回给对象。 

1 p1 = Person('twonss',22,'male',177,133)  # 只要init方法里面有参数,就要在实例化一个对象的时候传参数。
2 
3 print(p1)  # 生成一个丰满的对象空间地址<__main__.Person object at 0x00000000021CAE80>
4 print(p1.__dict__)  # 以字典的形式打印出构造方法里面的属性。
5 {'name': 'twonss', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133}

在构造方法内添加属性:

p1.hobby = 'Bragging'
print(p1.hobby)
Bragging

print(p1.__dict__)
{'name': 'twonss', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133, 'hobby': 'Bragging'}

在类的其他方法内添加属性,比如在work方法里面添加一个属性。

p1 = Person('twonss',22,'male',177,133)
p1.work('IT')  # 先执行内部方法,然后查看是否成功添加属性
print(p1.job)
IT

print(p1.__dict__)
{'name': 'twonss', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133, 'job': 'IT'}

查看此时方法内部的self和p1:

print(p1)  # <__main__.Person object at 0x000000000220AEF0>

对象操作属性的两种方法:

1、查看属性,使用__dict__只能查:

1 print(p1.__dict__)  
2 {'name': 'twonss', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133}

2、属性的增删改查:对象名.属性名

(1)增

1 p1.hobby = 'Bragging'
2 
3 print(p1.__dict__)
4 {'name': 'twonss', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133, 'hobby': 'Bragging'}

(2)删

1 del p1.hobby
2 
3 print(p1.__dict__)
4 {'name': 'twonss', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133}

(3)改

 1 p1.name = 'eric'
 2 
 3 print(p1.name)  # eric
 4 print(p1.__dict__)
 5 {'name': 'eric', 'age': 22, 'sex': 'male', 'high': 177, 'weight': 133}
 6 
 7 p1.age = 33
 8 
 9 print(p1.age)  # 33
10 print(p1.__dict__)
11 {'name': 'eric', 'age': 33, 'sex': 'male', 'high': 177, 'weight': 133}

(4)查

1 print(p1.name)  # twonss
2 print(p1.age)  # 22
3 print(p1.sex)  # male
4 print(p1.high)  # 177
5 print(p1.weight)  # 133

3、通过对象访问类的静态变量(只能访问,不能增删改):

1 print(p1.animal)  # 灵长类动物
2 print(p1.soup)   # 会思考
posted on 2018-06-20 11:14  花豆豆  阅读(126)  评论(0编辑  收藏  举报