python——类和对象

1.类

类是具有相同属性和方法的对象的集合

class是类名


2.定义一个类:
 class Person:
 def eat(self):
 print("正在吃饭...")
 def sleep(self):
 print("正在睡觉...")


3.类的命名

首字母要大写

以大小写分割单词

不使用下划线


4.属性分归属  类属性 对象属性
对象属性的两种创建方式:
self 对象的载体

def __init__(self,name,age):
 self,name=name;
 self,age=age;

5.对象名,属性 赋值的形式
__init__(self,name,age)在创建类的实例的时候,会自动调用这个方法,一般用户对实例属性初始化;
class person:
  def__init__(self,name,age):
    self.name=name;
    self.age=age;
  print("执行init时就被调用了")
p=person("tom",20)
print(p.name)
print(p.age)

6. __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'>

7.对象属性 私有和共有
 
  类属性 公有和私有

     对属性进行私有化 __属性,外部访问不到,也不可对属性进行赋值

  1. class Person(object):  
  2.      def __init__(self, name):  
  3.          self.name = name  
  4.          self._title = 'Mr'  
  5.          self.__job = 'Student'  
  6. p = Person('Bob')  
  7. print (p.name)  
  8.   Bob  
  9. print (p._title)  
  10.   Mr  
  11. print (p.__job)  
class Person(object):
     def __init__(self, name):
         self.name = name
         self._title = 'Mr'
         self.__job = 'Student'
p = Person('Bob')
print (p.name)
  Bob
print (p._title)
  Mr
print (p.__job)


8. 封装  2步

   (1)把属性变成私有

   (2)用set()和get()函数写一个方法 

  1. class Person:  
  2.     def __init__(self,name,age):  
  3.         self.name=name  
  4.         self.__age=age  
  5.     def getAge(self):  
  6.         return self.__age  
  7.     def setAge(self, age):  
  8.         if age<0 or age>100:  
  9.             self.__age=18;  
  10.         else:  
  11.             self.__age=age  
  12.     def showtime(self):  
  13.         print("姓名:{}".format())  
  14. p=Person("as",20);  
  15. print(p.getAge())  
  16. p.setAge(10)  
  17. print(p.getAge())  
  18. >>>  20  
  19.      10  
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
9.def __str__() 一个类的实例变成str,需要用特殊方法__str__()

  1. class Person(object):  
  2.     def __init__(self, name, gender):  
  3.         self.name = name  
  4.         self.gender = gender  
  5.   
  6. p = Person('Bob', 'male')  
  7. print (p)  
  8. >>> <__main__.Person object at 0x02171270>  
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>

  1. class Person(object):  
  2.     def __init__(self, name, gender):  
  3.         self.name = name  
  4.         self.gender = gender  
  5.     def __str__(self):  
  6.         return '(Person: %s, %s)' % (self.name, self.gender)  
  7. p = Person('Bob', 'male')  
  8. print (p)  
  9. >>>  (Person: Bob, male)  
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)

10.公有方法和私有方法;

    私有方法在方法前加两个下划线:def __text():


11. 自动销毁方法:__del__(): 当对象没有引用的时候,或程序结束的时候,程序自动调用__del__()

      
  1. class Person:  
  2.      def __init__(self,name,age):  
  3.          self.name=name  
  4.          self.age=age  
  5.      def __del__(self):  
  6.          print("对象张三被销毁")  
  7. zhangsan=Person("张三",20)  
  8. zhangsan.__del__()  
  9. >>> 对象张三被销毁  
  10.     对象张三被销毁  
class Person:
     def __init__(self,name,age):
         self.name=name
         self.age=age
     def __del__(self):
         print("对象张三被销毁")
zhangsan=Person("张三",20)
zhangsan.__del__()
>>> 对象张三被销毁
    对象张三被销毁

12.测试对象有多少次引用 

    import sys

    t=T()

    sys.getrefcount(t)返回2  从2开始

  1. import  sys  
  2. class Person:  
  3.     def __init__(self,name,age):  
  4.         self.name=name;  
  5.         self.age=age;  
  6. zhangsan=Person("张三",20)  
  7. print(sys.getrefcount(zhangsan))  
  8. >>> 2  
import  sys
class Person:
    def __init__(self,name,age):
        self.name=name;
        self.age=age;
zhangsan=Person("张三",20)
print(sys.getrefcount(zhangsan))
>>> 2

13.访问私有属性可以通过 对象._类名__属性访问到(不建议用这个方法)


14.id()函数 查看对象的内存地址;


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

    类方法:cls 表明是 类

                  在方法上添加 @classmethod装饰器

                  def class_method(cls):

                  可以通过类方法调用类属性,也可以通过对象调用类属性;
   
    修改类属性的2种方式:

                  1.类名.类属性=... 
                  2.实例对象__class__类属性=...

    静态方法:前面加@staticmethod,静态方法可以加参数,与类和对象都没有关系,也可以通过类和对象调用;


  1. class Person:  
  2.     def __init__(self,name,age):  
  3.         self.name=name;  
  4.         self.age=age;  
  5.   
  6.     def showInfo(self):  
  7.         print("姓名{0} 年龄{1}".format(self.name, self.age))  
  8.   
  9.     @staticmethod  
  10.     def goHome(self,name, by):  
  11.         print(name, "回家...", by)  
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)


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





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值