初識面向對象

类属性与对象属性

创建对象 也称之为实例化   产生的对象也称之为实例

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

init方法的作用

init 是初始化的缩写 用于为对象的属性设置初始值

执行时机:当实例化产生对象时会自动执行该函数
    会自动传入需要初始化的对象
    初始化必须包含至少一个参数 用于表示对象本身
    该函数不允许有返回值

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> #查看结果为普通函数

 

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/duGD/p/10878716.html