1.基础
- "类"由"class"翻译过来,类是对象的定义,物件才是具体的实例
- 对象主要有三点,"对象"是"类"的实例
<1>属性(即特征)
<2>方法(它能做什么)
<3>标识(内存已帮忙处理好)
2.伪代码实例:
class 美女:
# 没有括号的是属性
胸围 = 90
腰围 = 58
臀围 = 83
皮肤 = white
# 有括号的是方法
唱歌()
做饭()
- 实例化:
王美女=美女()
# 属性
a=王美女.胸围
# 属性值重新生成
王美女.皮肤=black
# 通过实例访问方法
王美女.做饭()
3.另一种声明类的方法,了解下:
>>> __metaclass__=type
# 不需要在加括号
>>> class CC:
pass
>>> cc=CC()
>>> cc.__class__
<class '__main__.CC'>
>>> type(cc)
<class '__main__.CC'>
4.一个"大众脸"的基础"类"实例:
# 这么写也可以,括号可以省略
# class Person:
class Person():
"""
This is a sample of class.
"""
def __init__(self,name):
#self.family=name #名称可以自己定义,不是绝对的
self.name=name
# 类函数的特点,第一个参数一定是self,代表实例
def get_name(self):
return self.name
def color(self,color):
d={}
d[self.name]=color
return d
# 由于初始化了,故必须传入值,否则报错
# aa=Person()
# TypeError: __init__() missing 1 required positional argument: 'name'
aa=Person('Jim Green')
print(aa.name)
>>>
Jim Green
- 完整实例:
#class Person:
class Person():
"""
This is a sample of class.
"""
def __init__(self,name):
#self.family=name #名称可以自己定义,不是绝对的
self.name=name
def get_name(self):
return self.name
def color(self,color):
d={}
d[self.name]=color
return d
if __name__=='__main__':
# girl=Person('Teacher Cang')
girl=Person(name='Teacher Cang')
print(girl.name) # 调用属性
print(girl.get_name()) #调用方法(函数)
print(girl.color(color='yellow')) #调用函数
>>>
Teacher Cang
Teacher Cang
{'Teacher Cang': 'yellow'}
5.类的属性访问,添加,删除:
>>> class A:
# 类A什么都没有
# 只有一个变量x,指向7
# 这里的x就称为类的属性
x=7
# 访问类A的属性
>>> A.x
7
# 增加类A的属性
>>> A.y=9
>>> A.y
9
# 使用del 删除属性
>>> del A.x
# x属性已经不存在了
>>> A.x
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
A.x
AttributeError: type object 'A' has no attribute 'x'
# y属性依然存在
>>> A.y
9
# 改变y属性指向的值
>>> A.y=10
>>> A.y
10
# 浏览类A的属性和方法,发现刚刚添加的y属性果然显示在最后...
>>> dir(A)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'y']
下面列出类的几种特殊属性的含义,读者可以一一查看:
- C.__name__ :以字符串的形式,返回类的名字,注意这时候得到的仅仅是一个字符串,它不是一个类对象
- C.__doc__ :显示类的文档
- C.__base__ :类C的所有父类。如果是按照上面方式定义的类,应该显示 object ,因为以上所有类都继承了它。等到学习了“继承”,再来看这个属性,内容就丰富了
- C.__dict__ :以字典形式显示类的所有属性
- C.__module__ :类所在的模块
>>> A.__dict__
mappingproxy({'__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None, '__dict__': <attribute '__dict__' of 'A' objects>, 'y': 10, '__module__': '__main__'})
>>> A.__doc__
>>> A.__name__
'A'
>>> A.__base__
<class 'object'>
# __main__.A
>>> A.__module__
'__main__'
# math.sin
>>> from math import sin
>>> sin.__module__
'math'
网友评论