Ai达人养成营 python第四堂,面向对象笔记:

面向对象

定义一个类

class Hero(object):#Object)表示该类从哪个类继承下来的,Object类是所有类都会继承的类。
    注意类的内容首行缩进
class Hero(object):  # class 表示创建的是一个类 object表示从object继承而来
#初始化实例
hero1 = Hero()
hero1  # hero1是类的一个实例
hero2.方法name,变量名进行调用
self#self表示创建的类实例本身

实例

class Hero(object): 
    def __init__(self, name, init_health=100, init_attack=10, alive=True):
        # 构造函数/初始化方法 在创建对象时候执行
        self.name = name  # 为对象绑定属性
        self.health = init_health
        self.attack = init_attack
        self.alive = True
        
        self.birth()

    def attack_enemy(self, enemy):
        # 对象的方法 用本类创建的所有对象都有这个方法
        enemy.health -= self.attack
        if enemy.health <= 0:
            enemy.alive = False 
            enemy.health = 0
            print(f'{enemy.name} 死亡')

    def upgrade(self):
        self.attack *= 1.1
        self.health *= 1.1

    def birth(self):
        print(f'我,{self.name},出生了!')

    def recovery(self):
        self.health += 100

访问限制

self.__attack = init_attack   # 私有属性
self._health = init_health
class Hero(object): 
    def __init__(self, name, init_health=100, init_attack=10, alive=True):
        # 构造函数/初始化方法 在创建对象时候执行
        self.name = name  # 为对象绑定属性
        self.health = init_health
        self.__attack = init_attack   # 私有属性
        self.alive = True
        
        self.__birth()

    def attack_enemy(self, enemy):
        # 对象的方法 用本类创建的所有对象都有这个方法
        enemy.health -= self.attack
        if enemy.health < 0:
            enemy.alive = False 
            enemy.health = 0
            print(f'{enemy.name} 死亡')

    def upgrade(self):
        self.__attack *= 1.1
        self.health *= 1.1

    def __birth(self):
        print(f'我,{self.name},出生了!')

    def get_attack(self):
        return self.__attack

    def set_attack(self, value):
        assert type(value)==int
        if value > 10000:
            value = 10000
        self.__attack = value

Python内置类属性

__dict__ : 类的属性(包含一个字典,由类的数据属性组成)
__doc__ :类的文档字符串
__name__: 类名
__module__: 类定义所在的模块(类的全名是'__main__.className',如果类位于一个导入模块mymod中,那么className.__module__ 等于 mymod)
__bases__ : 类的所有父类构成元素(包含了一个由所有父类组成的元组)

类属性和类方法

类中的属性分为:
实例属性:对象所有,互不干扰
类属性:类所有,所有对象共享

类中的方法分为:
实例方法:定义中有self 参数
类方法:定义中有cls 参数,使用@classmethod 装饰器
静态方法:定义中即没有self 参数,也没有cls 参数,使用@staticmethod 装饰器

实例

class Hero(object): 

    version = 'v0.0.1'

    def __init__(self, name, init_health=100, init_attack=10, alive=True):
        # 构造函数/初始化方法 在创建对象时候执行
        self.name = name  # 为对象绑定属性
        self._health = init_health  # 假装自己是私有属性 
        self.__attack = init_attack   # 私有属性
        self.alive = True
        
        self.__birth()

    def attack_enemy(self, enemy):
        # 对象的方法 用本类创建的所有对象都有这个方法
        enemy._health -= self.attack
        if enemy._health < 0:
            enemy.alive = False 
            enemy._health = 0
            print(f'{enemy.name} 死亡')

    def upgrade(self):
        self.__attack *= 1.1
        self._health *= 1.1

    def __birth(self):
        print(f'我,{self.name},出生了!')

    def get_attack(self):
        return self.__attack

    @classmethod
    def get_version(cls):
        return cls.version

    @classmethod
    def set_version(cls, value):
        cls.version = value
hero1.version = 'v0.0.3'#是绑定了一个对象属性
print(hero1.get_version(),hero2.get_version())#调用的是类方法得到的是类属性

机器学习建模中的类

from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression

X, y = load_iris(return_X_y=True)
clf = LogisticRegression(random_state=0,solver='newton-cg')  # 初始化一个对象
clf.fit(X, y)  # 调用对象的方法
clf.predict(X)  # 调用对象的方法
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
       2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2])
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值