初識面向對象
class Person: color = "black" def eat(self): print("黑人哥们正在吃饭....") p1 = Person() print(p1) print(p1.color) print(p1.__dict__) p2 = Person() print(p2) print(p2.color) print(p2.__dict__) # print(id(p1.color)) print(id(p2.color)) print(id(Person.color))
当修改某一个对象的属性时 不会影响其他对象和类
p2.color = "yellow" print(p2.color) print(p1.color) print(Person.color) Person.color = "red" print(p1.color) print(p2.color
class Dog: def __init__(self,age,name,**kwargs): print("init run") print(self) self.age = age d = Dog(5,'agr') print(Dog.__init__) print(d) print(d.age) self.name = name
当使用类调用时,就是一个普通函数 有几个参数就得传几个参数
当用对象来调用时,是一个绑定方法了,会自动将对象作为第一个参数传入
一个类中可以有属性和方法
1.绑定方法
1.1对象绑定方法
在使用对象调用时会自动传入对象本身
class People: def __init__(self,name,age): self.name = name self.age = age def talk(self): pass p = People('xiaohua',18) print(p.talk)
1.2类绑定方法
@classmethod
在使用对象调用时会自动传入类本身
在使用类来调用时也会自动传入类本身
单例模式中就会经常使用@classmethod
lass People: @classmethod def talk(cls): pass p = People() print(People.talk)
2.非绑定方法
即不需要对象中的数据 也不需要类中的数据 那就定义为非绑定方法,就是普通函数
@staticmethod
import hashlib import time class MySQL: def __init__(self,host,port): self.id=self.create_id() self.host=host self.port=port @staticmethod def create_id(): #就是一个普通工具 m=hashlib.md5(str(time.clock()).encode('utf-8')) return m.hexdigest() print(MySQL.create_id) #<function MySQL.create_id at 0x0000000001E6B9D8> #查看结果为普通函数 conn=MySQL('127.0.0.1',3306) print(conn.create_id) #<function MySQL.create_id at 0x00000000026FB9D8> #查看结果为普通函数