二.python面对对象 ------1类和对象

 

1.类

  类:具有相同的属性和方法的 对象 的集合
 对象:万物皆对象
 类和对象的关系:
 类的包含属性和方法:
 类是对象的模板
 对象是类的实例

语法:
    class 类名: 
        属性  
        方法 

定义一个类:
    # 类的命名
  # 首字母大写
  # 以大小写分割单词
  # 不使用下划线“_”
 

---------------------------------------------------------------------------------------------------------------------------------

2.属性
概念:用于访问类字段的成员;
属性用途:保证数据的安全,作数据的验证;

属性名:
使用名词,说明操作对象
首字母小写
以大写字母分割单词

方法名:
       使用谓词(动词+对象),说明对什么对象进行什么操作
       首字母小写
       以大写字母分隔单词
       updatePhone、a
       属性相对于类来说属于全局,每个方法都可以调用;

------------------------------------------------------------------------------------

3.  __init__(self,name,age)   在创建类的实例的时候,

    回自动调用这个方法,一般用户对实例属性初始化;

class Person:  

      def __init__(self,name,age):  

#self.name 创建一个属性交name 并且把v_name 赋值给了name

            self.name=name;  

            self.age=age

            print("执行init时就被调用了") 

p=Person("tom",22) 

print(p.name) 

print(p.age)  

>>>  执行init时就被调用了  执行结果:

     tom  

     22 

-----------------------------------------------------------------------------------------------------

4. __new__(cls,*agrs,**kwargs)

在类调用init方法时,new方法决定是否要用init方法,因为new可以调用其他类的方法,或者返回别的对象来
作为本类的实例;
new()方法的特性:
new()方法时在类准备将自身实例化时调用;
new()方法始终都是类的静态方法,即使没有被加上静态方法装饰器;

class A(object):  
    def __init__(self,*args,**kwargs):  
        print( "init &&&&  %s" % self.__class__)  
    def __new__(cls,*args,**kwargs):  
        print( "new &&&&  %s" % cls)  
        return object.__new__(cls,*args,**kwargs)  
a=A()  

执行结果:
>>>  new &&&&  <class '__main__.A'>  
     init &&&&  <class '__main__.A'>  

-------------------------------------------------------------------------------------------------------------------------------

5.对象属性 私有和公有
   class role(): # 传参数

    def __init__(self,name,role,weapon,life_value=100,moneny=15000):
        # 构造函数
        # 实例化过程中做一些类的初始化工作

        self.name = name
        self.role = role
        self.weapon = weapon
        self.life_value = life_value
        self.moneny = moneny
        self.__heart = 'normal'   # 私有属性

    def shot(self):  # 类的方法,功能(动态属性)
        print("shotting")
        print("私有属性", self.__heart)
        self.__heart = 'dddd'

        print("私有属性", self.__heart)

    def got_shot(self):
        print("on,%s got shoot..." % self.name)

    def buy_gun(self,gun_name):
        print("%s just bought %s" %(self.name,gun_name))
        self.weapon = gun_name

b1 = role('mike','police','AK47')

print(b1.shot())
'''
shotting
私有属性 normal
私有属性 dddd
None
'''


6. 封装  2步
   (1)把属性变成私有
   (2)用set()和get()函数写一个方法 
class Person:  
    def __init__(self,name,age):  
        self.name=name  
        self.__age=age  
    def getAge(self):  
        return self.__age  
    def setAge(self, age):  
        if age<0 or age>100:  
            self.__age=18;  
        else:  
            self.__age=age  
    def showtime(self):  
        print("姓名:{}".format())  
p=Person("as",20);  
print(p.getAge())  
p.setAge(10)  
print(p.getAge())  

执行结果:
>>>  20  
     10 

----------------------------------------------------------------------------------------

7.def __str__() 一个类的实例变成str,需要用特殊方法__str__()

class Person(object):  

    def __init__(self, name, gender): 

        self.name = name  

        self.gender = gender    

p = Person('Bob', 'male')  

print (p)  

>>> <__main__.Person object at 0x02171270>

class Person(object):  

    def __init__(self, name, gender):  

        self.name = name  

        self.gender = gender  

    def __str__(self):  

        return '(Person: %s, %s)' % (self.name, self.gender)  

p = Person('Bob', 'male')  

print (p)  

>>>  (Person: Bob, male)  

-----------------------------------------------------------------------------------------

8. 自动销毁方法:__del__(): 当对象没有引用的时候,

    或程序结束的时候,程序自动调用__del__()

class Person:  

     def __init__(self,name,age):  

         self.name=name  

         self.age=age  

     def __del__(self):  

         print("对象张三被销毁")  

zhangsan=Person("张三",20)  

zhangsan.__del__()  

执行结果:

>>> 对象张三被销毁  

    对象张三被销毁  

-------------------------------------------------------------------------------------------------------------------


9.类属性:属于类成员,对象共有的;

    类方法:cls 表明是 类
                  在方法上添加 @classmethod装饰器
                  def class_method(cls):

                  可以通过类方法调用类属性,也可以通过对象调用类属性;
修改类属性的2种方式:
                  1.类名.类属性=... 
                  2.实例对象__class__类属性=...
          静态方法:前面加@staticmethod,静态方法可以加参数,与类和对象都没有关系,也可以通过类和对象调用;                  

class Person:  

    def __init__(self,name,age):  

        self.name=name;  

        self.age=age;    

    def showInfo(self):  

        print("姓名{0} 年龄{1}".format(self.name, self.age))  


    @staticmethod  

    def goHome(self,name, by):  

       print(name, "回家...", by)  


10. dir()   __dir__  展示一个类/对象的内部属性和函数;

          dir(zhangsan)
  
          zhangsan.__dir__()  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值