|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 赤血危机 于 2017-9-20 16:15 编辑
类对象(相当于图纸) = 属性(静态)+方法(动态)
引用类对象即可创建实例对象(产品)。
定义类对象的方法
class xxx(这个Xxx的首字母要大写):
(定义变量)
(定义函数)
这样类就创建好了
使用类对象创建实例对象:
xxx = Xxx()
这样,xxx.类对象的变量和xxx.类对象的函数名就可以调用了
面向对象(OO)的三个特征:封装,继承,多态
在类里面定义变量之后,在类内引用或修改该变量需要前面加上【self.】,在类内定义函数时默认有且必须有第一个参数为self,例:
- class Person:
- name = '赤血危机'
- def print_name(self):
- print(self.name)
- def xiugai_name(self):
- self.name = input('请输入名字')
- f = Person()
- f.xiugai_name()
- f.print_name()
复制代码
魔法方法__init__,可以在创建类的实例之时直接传参数进去使用,例如:
- class Person:
- name = ''
- def __init__(self,name):
- self.name = name
- def print_name(self):
- print(self.name)
- f = Person('赤血危机')
- f.print_name()
复制代码
私有变量:前面直接定义函数内的变量都是公有变量,要定义私有变量,例如:- class Person:
- __name = '赤血危机' #在变量面前加【__】之后这个变量就是私有变量了
- def getname(self):
- return(self.__name) #此函数从类的内部获取私有变量并返回
- '''这时候用以下实例化代码:
- f = Person()
- f.__name或者f.name都是无法获取__name这个私有变量的'''
- f = Person()
- print(f.getname())
- print(f._Person__name)
- '''这两种方式可以获取私有变量'''
复制代码
子类继承父类的方法:
class 子类名(父类名):
只要子类名加了括号以后,就可以继承父类的变量和函数
在子类当中写与父类中有相同函数名的函数,会覆盖掉父类的函数调用(当然父类的函数不会被修改),而是调用新写的子类函数。
如果子类使用了与父类中存在的相同函数名,又不想把父类的函数盖掉,可以使用super方法
格式: super().函数名()
Python支持多重继承,可以同时继承多个父类的方法和属性
格式 class 子类名(父类1,父类2,.......)
但是很容易出现不可预知的bug,谨慎使用
一些类相关的BIF(BIF调用的时候是不加前缀的):
issubclass(类1,类2)——检查类1是否为类2的子类(注意自身也被认为是自己的子类),类2可以为类名,也可以是元组,会检查类1是否为元组中每个元素的子类。如果是返回True,否则返回False。如果第二个参数不是类名或元组,会抛出TypeError异常。
isinstance(实例对象,类)——检查实例对象是否为某个类的实例对象,同样类可以是元组。返回True或者False。如果第一个参数不是实例对象,就会返回False。异常同上。如果某个实例对象是子类的实例对象,那么它也是父类的实例对象。
hasattr(类名,属性名)——检查该类中是否有该属性,注意属性名要用引号变成字符串,否则会报NameError异常。返回True或者False。
getattr(类名,属性名[,默认值])——返回该类中的该属性值。若该类中无该属性值,则返回默认值,否则报AttributeError异常。属性名同样需要引号。
setattr(类名,属性名,值)——在类中修改该属性的值,如果该属性不存在则创建一个新属性并赋值。属性名同样需要引号。
delattr(类名,属性名)——在类中删除该属性,若该属性不存在则报AttributeError异常。属性名同样需要引号。
property方法:用属性来调用方法去改变属性
格式:property(获取值方法,设置值方法,删除值方法 )
例:
- class Data:
- def __init__(self,value = 0):
- self.data = value
- def get_data(self):
- print('正在调用get_data方法')
- return self.data
- def set_data(self,value):
- print('正在调用set_data方法')
- self.data = value
- def del_data(self):
- print('正在调用del_data方法')
- del self.data
- x = property(get_data,set_data,del_data)#三个方法的顺序一定不能写错,这个x可以换成想要的名字
- d = Data()
- print(d.x)#只要用到d.x的值就会调用get_data方法
- d.x = 10#只要给d.x赋值就会调用set_data方法
- del d.x#只要删除d.x就会调用del_data方法
复制代码
这个方法的意义在于,只要修改property中的内容,即使修改了修改参数,获取参数和删除参数的方法名称,下面的程序就都不用改。 |
评分
-
参与人数 1 | 荣誉 +5 |
鱼币 +5 |
贡献 +3 |
收起
理由
|
霜满天
| + 5 |
+ 5 |
+ 3 |
感谢楼主无私奉献! |
查看全部评分
|