class Women:
sex = '女'
faceValue = "高"
height = "168"
weight = "85斤"
color = "yellow"
def makeChild(self):
print("可以生宝宝")
def cookie(self):
print("做饭")
def memeda(self):
print("白天么么哒")
#打印Women 类
print(Women) #
object = 类名([参数…])
lisi = Women() #将Women类实例化 成对象
print(lisi) #<__main__.Women object at 0x000001B6873C8CC0>
object.属性名
object.方法名()
注意: 类里面的变量 称之为属性 类里面的函数 称之为方法
方法里面的self代表的是当前类的实例化后的对象
self不是只能叫self 别的也可以 但是规范来说 都使用self
class A:
name = ''
def demo(self):
print(self) #代表当前实例化类的对象
print(id(self))
a = A()
a.demo()
print(a)
print(id(a))
和函数一样 代码遇到return 下面就不在执行 会将值返回给调用处
没有return的方法 打印调用处的值为 None
class Demo:
name = ''
def speak(self):
print("我是{}号楼".format(self.name))
def myRetuen(self):
return self.name
print(self.name) #不在执行
d2 = Demo()
d2.name = 'd2' #给当前对象 添加对象属性
# print(d2.name)
# print(d2.speak()) #None
d2Name = d2.myRetuen()
print(d2Name) #d2
class A:
#通过方法创建对象属性
def createVar(self):
self.xx = 'oo'
a = A()
#对象名.属性名
a.name = 'xx'
类名.属性名
from types import MethodType
def func(self):
print('func')
from types import MethodType
a = A()
#a.func = MethodType(方法名,对象名)
a.func = MethodType(func,a)
def func(self):
print('func')
#类名.属性名 = 函数名
A.func = func
只能创建__slots__允许的属性 否则会报 AttributeError: ‘A’ object has no attribute ‘xxx’
class A:
__slots__ = ('属性1','属性2'...)
(1) 类的私有属性:以__ 作为开头 不能再类的外部进行使用和访问 在类的里面使用 self.__属性名
在类的外部: 对象._类名__属性名 查找
在类的内部: 方法里面的变量 self.__属性名 调用
\_类名\__\_属性名
(2) 类的私有方法
以__ 作为开头 不能再类的外部进行使用和访问 在类的里面使用 self.__方法名
在公有方法里面 通过self去调用
概念: 面向对象编程带来最大的好处就代码的重用 实现代码重用的操作就是累的继承
被继承的类称之为 父类、基类 或超类
继承的类称之为子类
所有的类都会继承一个超类 object
class 类名(继承的父类):
pass
class A:
#不管是本类还是子类 只要实例化 就会调用(前提是 没有被子类的__init__覆盖)
def __init__(self,n,a,s):
self.name = n
self.age = a
self.sex = s
def speak(self):
print("我现在{}岁了 我叫{} 我的性别是{}".format(self.age,self.name,self.sex))
# a = A('张三',18,'男')
# print(a.name)
# a.speak()
class B(A):
grade = ''
def __init__(self,name,age,sex,grade):
print('我是子类的__init__')
self.grade = grade
A.__init__(self,name,age,sex)
def speak(self):
A.speak(self)
print("我今年{} 我叫{} 我的成绩是{}".format(self.age,self.name,self.grade))
b = B('张三',18,'男',60)
# print(b.name)
# print(b.__dict__)
b.speak()
class 类名(继承的父类1,继承的父类2[,父类3..]):
pass
注意:
class A:
def speak(self):
print('我是A类的speak方法')
def a(self):
print('a')
class B:
def speak(self):
print('我是B类的speak方法')
def b(self):
print('b')
class C(A,B):
def speak(self):
super().speak() #还是从左往右找..
#super(C,self).speak()
# super(A,self).speak()
# super(B,self).speak()
__doc__
类的说明__name__
返回类名__base__
返回一个父类__bases__
返回多个父类__dict__
返回对象或者类的信息@staticmethod
可以在类的实例化成对象来调用 可以使用类名来调用
class A:
@staticmethod
def demo():
print('类来调用')
a = A()
a.demo()
A.demo()
__init__
构造方法 作为类的初始化__del__
析构方法 在当前文件执行完毕之前去执行 或者是使用 del 对象名 去触发__str__
用于转换成 人类能够阅读的形式 __repr__
转换成解释器查看的形式__add__
运算符重载__getattr__
调用不存在的属性的时候触发__len__
__getitem__
__setitem__