美文网首页
(十二)类<1>Basics

(十二)类<1>Basics

作者: 费云帆 | 来源:发表于2019-01-05 08:42 被阅读0次

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'

相关文章

网友评论

      本文标题:(十二)类<1>Basics

      本文链接:https://www.haomeiwen.com/subject/wxxrrqtx.html