1.类
类是具有相同属性和方法的对象的集合
class是类名
2.定义一个类:
class Person:
def eat(self):
print("正在吃饭...")
def sleep(self):
print("正在睡觉...")
3.类的命名
首字母要大写
以大小写分割单词
不使用下划线
4.属性分归属 类属性 对象属性
对象属性的两种创建方式:
self 对象的载体
def __init__(self,name,age):
self,name=name;
self,age=age;
5.对象名,属性 赋值的形式
__init__(self,name,age)在创建类的实例的时候,会自动调用这个方法,一般用户对实例属性初始化;
class person:
def__init__(self,name,age):
self.name=name;
self.age=age;
print("执行init时就被调用了")
p=person("tom",20)
print(p.name)
print(p.age)
7.对象属性 私有和共有
10.公有方法和私有方法;
def __init__(self,name,age):
self,name=name;
self,age=age;
5.对象名,属性 赋值的形式
__init__(self,name,age)在创建类的实例的时候,会自动调用这个方法,一般用户对实例属性初始化;
class person:
def__init__(self,name,age):
self.name=name;
self.age=age;
print("执行init时就被调用了")
p=person("tom",20)
print(p.name)
print(p.age)
6. __new__(cls,*agrs,**kwargs)
在类调用init方法时,new方法决定是否要用init方法,因为new可以调用其他类的方法,或者返回别的对象来
作为本类的实例;
new()方法的特性:
new()方法时在类准备将自身实例化时调用;
new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器;
class A(object):
def __init__(self,*args,**kwargs):
print( "init &&&& %s" % self.__class__)
def __new__(cls,*args,**kwargs):
print( "new &&&& %s" % cls)
return object.__new__(cls,*args,**kwargs)
a=A()
>>> new &&&& <class '__main__.A'>
init &&&& <class '__main__.A'>
7.对象属性 私有和共有
类属性 公有和私有
对属性进行私有化 __属性,外部访问不到,也不可对属性进行赋值
- class Person(object):
- def __init__(self, name):
- self.name = name
- self._title = 'Mr'
- self.__job = 'Student'
- p = Person('Bob')
- print (p.name)
- Bob
- print (p._title)
- Mr
- print (p.__job)
class Person(object):
def __init__(self, name):
self.name = name
self._title = 'Mr'
self.__job = 'Student'
p = Person('Bob')
print (p.name)
Bob
print (p._title)
Mr
print (p.__job)
8. 封装 2步
(1)把属性变成私有
(2)用set()和get()函数写一个方法
- class Person:
- def __init__(self,name,age):
- self.name=name
- self.__age=age
- def getAge(self):
- return self.__age
- def setAge(self, age):
- if age<0 or age>100:
- self.__age=18;
- else:
- self.__age=age
- def showtime(self):
- print("姓名:{}".format())
- p=Person("as",20);
- print(p.getAge())
- p.setAge(10)
- print(p.getAge())
- >>> 20
- 10
class Person:
def __init__(self,name,age):
self.name=name
self.__age=age
def getAge(self):
return self.__age
def setAge(self, age):
if age<0 or age>100:
self.__age=18;
else:
self.__age=age
def showtime(self):
print("姓名:{}".format())
p=Person("as",20);
print(p.getAge())
p.setAge(10)
print(p.getAge())
>>> 20
10
9.def __str__() 一个类的实例变成str,需要用特殊方法__str__()
- class Person(object):
- def __init__(self, name, gender):
- self.name = name
- self.gender = gender
- p = Person('Bob', 'male')
- print (p)
- >>> <__main__.Person object at 0x02171270>
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
p = Person('Bob', 'male')
print (p)
>>> <__main__.Person object at 0x02171270>
- class Person(object):
- def __init__(self, name, gender):
- self.name = name
- self.gender = gender
- def __str__(self):
- return '(Person: %s, %s)' % (self.name, self.gender)
- p = Person('Bob', 'male')
- print (p)
- >>> (Person: Bob, male)
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __str__(self):
return '(Person: %s, %s)' % (self.name, self.gender)
p = Person('Bob', 'male')
print (p)
>>> (Person: Bob, male)
私有方法在方法前加两个下划线:def __text():
11. 自动销毁方法:__del__(): 当对象没有引用的时候,或程序结束的时候,程序自动调用__del__()
- class Person:
- def __init__(self,name,age):
- self.name=name
- self.age=age
- def __del__(self):
- print("对象张三被销毁")
- zhangsan=Person("张三",20)
- zhangsan.__del__()
- >>> 对象张三被销毁
- 对象张三被销毁
class Person:
def __init__(self,name,age):
self.name=name
self.age=age
def __del__(self):
print("对象张三被销毁")
zhangsan=Person("张三",20)
zhangsan.__del__()
>>> 对象张三被销毁
对象张三被销毁
12.测试对象有多少次引用
import sys
t=T()
sys.getrefcount(t)返回2 从2开始
- import sys
- class Person:
- def __init__(self,name,age):
- self.name=name;
- self.age=age;
- zhangsan=Person("张三",20)
- print(sys.getrefcount(zhangsan))
- >>> 2
import sys
class Person:
def __init__(self,name,age):
self.name=name;
self.age=age;
zhangsan=Person("张三",20)
print(sys.getrefcount(zhangsan))
>>> 2
13.访问私有属性可以通过 对象._类名__属性访问到(不建议用这个方法)
14.id()函数 查看对象的内存地址;
15.类属性:属于类成员,对象共有的;
类方法:cls 表明是 类
在方法上添加 @classmethod装饰器
def class_method(cls):
可以通过类方法调用类属性,也可以通过对象调用类属性;
修改类属性的2种方式:
1.类名.类属性=...
2.实例对象__class__类属性=...
静态方法:前面加@staticmethod,静态方法可以加参数,与类和对象都没有关系,也可以通过类和对象调用;
- class Person:
- def __init__(self,name,age):
- self.name=name;
- self.age=age;
- def showInfo(self):
- print("姓名{0} 年龄{1}".format(self.name, self.age))
- @staticmethod
- def goHome(self,name, by):
- print(name, "回家...", by)
class Person:
def __init__(self,name,age):
self.name=name;
self.age=age;
def showInfo(self):
print("姓名{0} 年龄{1}".format(self.name, self.age))
@staticmethod
def goHome(self,name, by):
print(name, "回家...", by)
16. dir() __dir__ 展示一个类/对象的内部属性和函数;
- dir(zhangsan);
- zhangsan.__dir__()