python类和类方法静态方法

类的方法

   普通方法:
        定义格式:
             def 方法名(self,参数1,参数2):
                pass
         调用:
             都要依赖对象调用方法
             对象名.方法名(参数)
             注意: 在调用过程中会默认传递self对象,self表示的是对象本身

    方法中访问对象属性:
         self.属性名
         self.属性名= 值   ----》 改变对象属性的值

    方法中访问普通方法:
        self.方法名(参数)

类方法:
工具方法
类方法:

定义格式:
    @classmethod
    def 类方法名(cls,参数):
        pass
使用:
    类名.方法名()
    也可以通过:
    对象.方法名() (了解)

静态方法:

定义格式:
       @staticmethod
       def 方法名():
            pass
   使用:
      类名.方法名()
#类方法方法中能否访问对象属性?不能
#类方法,静态方法中能调用普通方法? 不能
class Utils:
    # 类属性
    version = '1.0'
    def __init__(self, id):
        self.id = id
    # 类方法
    @classmethod
    def conn_db(cls):  # cls其实就是类对象本身
        print('classmethod---->', cls)
        print('加载数据库驱动程序,当前版本号是:', cls.version)
        print('数据库建立连接成功!')
        # cls.select_data()
    @staticmethod
    def select_data():  # 参数:不依赖对象self,也不依赖类cls
        print('查询数据库的数据,当前版本号是:', Utils.version)
        Utils.conn_db()

    def show(self):
        print('----->show')

魔术方法:

魔术方法就是一个类的特殊方法,和普通方法唯一的不同时,普通方法需要调用!而魔术方法由系统自动调用
new;
实例化对象是Object类底层实现,其他类继承了Object的__new__才能够实现实例化对象。
没事别碰这个魔术方法,先触发__new__才会触发__init__

    class Person:
        def __init__(self):
            print('----------->init')
    def __new__(cls, *args, **kwargs):
        print('----------->new')
        obj = object.__new__(cls)
        return obj

    def __del__(self):
        print('------------>del')
先调用new 给inti创建一块地址空间

私有化:只能类自身中进行调用,对象在外部无法通过.访问
实现属性或者方法的私有化要通过: __属性名,__方法名()
python中的私有化,底层对私有属性进行了改名操作: _类名__属性名 或者 _类名__方法名()

   class Person:
        def __init__(self, name):
            self.name = name
            self.__age = 20
    
        def show_age(self):
            print('我的年龄是:', self.__age)
    
        def __test(self):
            print('我是测试私有的test方法')
加上  "__"之后就变成私有,调用时名字自动改成 "_类名__属性名"

封装,继承,多态

  1. 属性和方法—》封装到类中
  2. 属性封装: 将属性私有化,并定义公有set和get方法

私有化作用:
1. 隐藏属性,只能在类中使用
2. 对私有属性的赋值和取值起到一定的限制作用
3. 通过set方法限制赋值,通过get限制取值

class Person:
        # 限制属性作用
            __slots__ = ['__name', '__age', '__flag']
        
            def __init__(self, name, age):
                self.__name = name
                self.__age = age
                self.__flag = True
        
        def get_name(self):
            if self.__flag:
                return self.__name
            else:
                return '没有权限查看用户名'
    
        def get_age(self):
            return self.__age
    
        def set_name(self, name):
            if len(name) >= 6:
                self.__name = name
        else:
            print('名字必须要大于等于6位')

    def set_age(self, age):
        if 125 > age > 0:
            self.__age = age
        else:
            print('年龄赋值失败,必须在0~125范围内')


p = Person('lucy', 20)

print(p.get_name())
print(p.get_age())

p.set_name('steven')
print(p.get_name())

p.set_name('tom')
print(p.get_name())

p.set_age(10)
print(p.get_age())

@property 装饰器是用来装饰类中方法的
步骤:

  1. 在get方法上面添加@property装饰器,函数的名字最好更加简要,让使用者在调用或者访问的时候更加简单
  2. 装饰set方法:
    @属性名.setter
    def 属性名(self,参数):
    pass
    3.使用:
    对象 = 类名(参数)
    print(对象.属性名) -----> get方法
    对象.属性名=值 -----》 set方法
   class Person:
            __slots__ = ['__name', '__age', '__flag', '__password']
        
            def __init__(self, name, age):
                self.__name = name
                self.__pas
				self.sword = '1234'
                self.__age = age
                self.__flag = False
            
                @property
                def name(self):
                    if self.__flag:
                    return self.__name
                else:
                    return '没有权限查看用户名'
        
            @name.setter
            def name(self, name):
                if len(name) >= 6:
                    self.__name = name
            else:
                print('名字必须要大于等于6位')
    
        def get_age(self):
            return self.__age
    
        def set_age(self, age):
            if 125 > age > 0:
                self.__age = age
            else:
                print('年龄赋值失败,必须在0~125范围内')
    
        def login(self, name, password):
  

      if self.__name == name and self.__password == password:
            print('登录成功!')
            self.__flag = True
        else:
            print('用户名或者密码有误!')


p = Person('jack', 21)
p.login('jack', '124')
p.set_age(22)
print(p.get_age())
print(p.name)

p.name = 'steven'
print(p.name)

p.name = 'tom'
print(p.name)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值