python学习之类和对象

类和函数中都可以创建闭包或者内部函数
self 代表实例对象本身
访问一个属性,它同时也是一个对象,拥有自己的属性

特殊类属性
C.__name__ 类C的名字
C.__doc__ 类C的文档字符串
C.__bases__ 类C的所有父类构成的元组
C.__dict__ 类C的属性
C.__module__ 类C定义所在的模块
c.__class__ 实例c对应的类
C.__mro__ 类查找顺序
issubclass(sub,sup) sub子类,sup父类,判断子类是否是父类子类
isinstance(obj1,obj2) obj1实例,obj2类,判断obj1是否是obj2实例
vars() 与dir()相似,只是给定的对象参数都必须有一个__dict__属性,返回一个字典。

动作和特征的集合叫对象
类抽象的共同的动作,共同的特征

类:把一类事物的相同的特征和动作整合到一起就是类
类是一个抽象的概念

对象:就是基于类而创建的一个具体的事物(具体存在的)
也是特征和动作整合到一起

1.什么叫类:类是一种数据结构,就好比一个模型,该模型用来表述一类事物(事物即数据和动作的结合体),
用它来生产真实的物体(实例)

2.什么叫对象:睁眼睛,你看到的一切的事物都是一个个的对象,你可以把对象理解为一个具体的事物
(事物即数据和动作的结合体)
(铅笔是对象,人是对象,房子是对象,狗是对象

3.类与对象的关系:对象都是由类产生的,上帝造人,上帝首先有一个造人的模板,这个模板即人的类,然后
上帝根据类的定义来生产一个个人

4。什么叫实例化:由类生产对象的过程叫实例化,类实例化的结果就是一个对象,或者叫做一个实例(实例=对象)

属性
类是用来描述一类事物,类的对象指的是这一类事物中的一个个体是事物就要有属性,
属性分为
1.数据属性:变量
2.函数属性:函数 面向对象里通常称为方法
注意:类和对象均用点来访问自己的属性

类名.__dict__查看类属性字典
实例.__dict__查看实例属性字典,作用域是__init__范围

静态属性@property 封装逻辑
class test_static(object):
def __init__(self):
self.width=10
self.hight=5

def cal_area(self):
return self.width*self.hight

@property
def mutstion_cal_area(self):
return self.width*self.hight

test=test_static()
print(test.cal_area())
print(test.mutstion_cal_area)

类方法 (跟实例没有关系,类级别操作)
class Test_Static(object):
tag = 1

def __init__(self):
self.width = 10
self.hight = 5

@classmethod
def tell_info(cls):
print('---->', cls.tag)

Test_Static.tell_info()

静态方法(名义上归属类管理,不能使用类变量和实例变量,是类的工具包)
class Test_Static(object):
tag = 1

def __init__(self):
self.width = 10
self.hight = 5

@staticmethod
def wash_body(a,b,c):
print('%s %s %s正在洗澡'%(a,b,c))

Test_Static.wash_body('zhao','qian','sun')
t1=Test_Static()
t1.wash_body('add','sub','mol')

组合(类跟类之间的没有共同点,但是它们之间是有关联的)
class School:
def __init__(self,name,addr):
self.name=name
self.addr=addr

class Course:
def __init__(self,name,price,period,school):
self.name=name
self.price=price
self.period=period
self.school=school

def zhao_sheng(self):
print('%s zheng zai zhao sheng'%self.name)

s1=School('oldboy','beijing')
s2=School('oldboy','nanjing')
s3=School('oldboy','dongjing')

c1=Course('linux',10,'1h',s1)
print(c1.__dict__)
print(c1.school)
print(s1)

{'name': 'linux', 'price': 10, 'period': '1h', 'school': <__main__.School object at 0x0000000002943320>}
<__main__.School object at 0x0000000002943320>
<__main__.School object at 0x0000000002943320>

原文地址:https://www.cnblogs.com/jinpingzhao/p/12745784.html