绑定,非绑定方法,隐藏属性,property装饰器,继承

绑定方法

复制代码
# 绑定方法:绑定给类的,绑定给对象的
class Student():
    school = 'SH'def __init__(self, name, age):
        self.name = name
        self.age = age
​
    def tell_info(self, v):
​
        print('name:%s, age: %s, v:%s' % (self.name, self.age, v))
​
​
​
stu = Student('tom', 19)
​
# 对象来调用方法, 绑定给对象的方法由对象来调用,特殊之处:把对象自己当成第一个参数传递到方法里面
stu.tell_info(10)  # stu.tell_info(stu)
# 绑定给类的方法
# ip port
class Mysql():
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
​
    # 绑定给类的方法
    @classmethod
    def from_func(cls):
        # Oracle()
        return cls('127.0.0.1', '3306')
    
    
    def func(self):
        self.__class__# obj = Oracle('127.0.0.1', 3306)
#
# obj1 = obj.from_func()
# print(obj1)
# 类调用
Mysql.from_func() # Mysql.from_func(Mysql)
复制代码

非绑定方法

复制代码
# 即不绑定给类,也不绑定给对象
class People():
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.id = self.create_id()
​
    @staticmethod
    def create_id():
        import uuid
        return uuid.uuid4()
​
​
obj = People('tom', 19)
# res=obj.create_id()  # obj.create_id(obj)
# print(res)
print(People.create_id())
# import uuid
# print(uuid.uuid4())
'''
    非绑定方法:静态方法
        1. 加一个装饰器:@staticmethod
        2. 函数已经变成普通函数
        3. 对象和类都可以调用,
'''
复制代码

 

隐藏属性

复制代码
# 隐藏属性是有应用场景的
1. 如何隐藏?
2. 为什么要隐藏?
​
class Student():
    __country = 'CHINA'  # _Student__country
def __init__(self, name, age):
        self.__name = name # _Student__name
        self.age = age
​
    def __func(self): # _Student__func
        print('from func')
​
    def get_country(self):
        return self.__country  # self._Student__country
def set_country(self, v):
        if not type(v) is str:
            print('不是str')
            return
        self.__country = v
​
​
print(Student.__dict__)
复制代码

 

property装饰器

复制代码
class Student():
    __country = 'CHINA'  # _Student__country
def __init__(self, name, age):
        self.__name = name # _Student__name
        self.age = age
​
    def __func(self): # _Student__func
        print('from func')
​
    # 把函数伪装成属性
    @property
    def country(self):
        return self.__country  # self._Student__country
​
    @country.setter
    def country(self, v):
        if not type(v) is str:
            return
        self.__country = v
    @country.deleter
    def country(self):
        print('不能删')
        
 stu = Student('tom', 18)
​
# print(stu.country)
# stu.country = 'xxx'
# print(stu.country)
del stu.country
复制代码

继承

1. 什么是继承?
继承就是新建类的一种方式,新建出来的类称为子类或者叫派生类,被继承的类称为父类或者基类
   
   子类可以遗产父类的属性
2. 为什么要用继承?
类解决了对象与对象之间的代码冗余问题
   继承解决类与类之间的代码冗余问题

3. 怎么用继承?
经典类:没有继承object类的子子孙孙类都是经典类
   新式类:继承了object类的子子孙孙类都是新式类
   '''只有在python2中才区分经典类和新式类,在python3中都是新式类'''
   

复制代码
class People():
    school = 'SH'
    def __init__(self, name, age, gender):
        self.name = name
        self.age = age
        self.gender = gender
​
class Student(People):
    def __init__(self, name, age, gender, course=None):
        if course is None:
            course = []
        People.__init__(self, name, age, gender) # 指名道姓的调用
        self.course = course
​
    def choose_course(self):
        print('aaaa')
​
​
class Teacher(People):
    def __init__(self, name, age, gender, level):
        People.__init__(self, name, age, gender)
        self.level = level
​
    def score(self):
        print('打分')
​
stu = Student('tom', 19, 'male')
tea = Teacher('ly', 20 ,'female', 10)
​
print(stu.name)
print(stu.school)
print(tea.school)
复制代码

 

 

 

 

 

 

 

posted @   shangxin_bai  阅读(26)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示